/**
 * 用于存放我们各个微应用的数组。
 * 以后有多少个微应用，这个数组中就会存放多少个对象
 * name: 微应用名称 - 具有唯一性
 * entry: 微应用入口 - 通过该地址加载微应用，保证微应用地址和端口正确
 * container: 微应用挂载节点 - 微应用加载完成后将挂载在该节点上
 * activeRule: 微应用触发的路由规则 - 触发路由规则后将加载该微应用
 */
//引入状态管理机
import actions from '@/qiankun/actions'
const apps = [
    {
        name: 'qiankunChild',
        entry: '//localhost:8282',// 运行微应用的地址
        container: '#childDemo',// 展示的DOM容器 id
        activeRule: '#/qiankunChild',// 跳转路径(路由为 hash 模式则需添加“#”)
        props:{
            token: '',actions
        },// 通过props实现通信传递值
        sandbox: {
            strictStyleIsolation: true // 开启样式隔离
        }
    },
]

import {message} from "element-ui";

/**
 * registerMicroApps函数：用于注册微应用，将多个独立的前端应用注册到主应用中
 * addGlobalUncaughtErrorHandler函数：当微应用中的代码抛出了未捕获的异常时，这个处理函数会被调用，可以用来进行异常处理或记录日志等操作
 * start函数：用于启动微前端应用
 */
import {
    registerMicroApps,
    addGlobalUncaughtErrorHandler,
    start,
} from "qiankun";

/**
 * 注册微应用
 * 第一个参数 - 微应用的注册信息
 * 第二个参数 - 全局生命周期钩子
 */
console.log(apps)
registerMicroApps(apps, {
    // qiankun 生命周期钩子 - 微应用加载前
    beforeLoad: (app) => {
        console.log("before load", app.name);
        return Promise.resolve();
    },
    // qiankun 生命周期钩子 - 微应用挂载后
    afterMount: (app) => {
        console.log("after mount", app.name);
        return Promise.resolve();
    },
});
/**
 * 添加全局的未捕获异常处理器
 */
addGlobalUncaughtErrorHandler((event) => {
    console.error(event);
    const {message: msg} = event;
    // 加载失败时提示
    if (msg && msg.includes("died in status LOADING_SOURCE_CODE")) {
        message.error("微应用加载失败，请检查应用是否可运行");
    }
});

// 导出 qiankun 的启动函数
export default start;